package com.yanbao.shiro;

import com.free.common.vo.ResultModel;
import com.free.ext.logger.FreeLogger;
import com.free.ext.logger.FreeLoggerFactory;
import com.free.ext.shiro.SessionManager;
import com.free.ext.shiro.exception.EmptyCaptchaException;
import com.free.ext.shiro.exception.IncorrectCaptchaException;
import com.free.ext.shiro.realm.AbstractAuthenticatingRealm;
import com.free.ext.shiro.token.CapatchaUserPwdToken;
import com.google.code.kaptcha.Constants;
import com.yanbao.vo.CmsUserVo;
import org.apache.commons.lang3.StringUtils;
import org.apache.shiro.authc.AuthenticationException;
import org.apache.shiro.authc.UnknownAccountException;

/**
 * <p>
 * 功能概述:
 * </p>
 * <p>
 * 功能详述:
 * </p>
 */
public class YanbaoAuthenticatingRealm extends AbstractAuthenticatingRealm<CmsUserVo> {

    /*========================================================================*
     *                         Public Fields (公共属性)
     *========================================================================*/

    private static final FreeLogger LOGGER = FreeLoggerFactory.getLogger(YanbaoAuthenticatingRealm.class);

    private static final String YB_USERNAME = "ybadmin";

    private static final String YB_PASSWD = "ybadmin2018";
    /*========================================================================*
     *                         Private Fields (私有属性)
     *========================================================================*/

    /*========================================================================*
     *                         Construct Methods (构造方法)
     *========================================================================*/

    /*========================================================================*
     *                         Public Methods (公有方法)
     *========================================================================*/

    @Override
    public CmsUserVo authenticatePrincipal(CapatchaUserPwdToken token) throws AuthenticationException {

        LOGGER.info("用户登录信息{}", token.toString());

        if(StringUtils.isEmpty(token.getCapatcha())){
            LOGGER.info("用户[userName:{}]登录失败，未输入验证码", token.getUsername());
            throw new EmptyCaptchaException();
        }

        String sessionKapta = SessionManager.get(Constants.KAPTCHA_SESSION_KEY);
        if(StringUtils.isEmpty(sessionKapta) ||
                !StringUtils.equals(sessionKapta, token.getCapatcha())){
            LOGGER.info("用户[userName:{}]登录失败，验证不正确", token.getUsername());
            throw new IncorrectCaptchaException();
        }
        if(!token.getUsername().equals(YB_USERNAME) || !String.valueOf(token.getPassword()).equals(YB_PASSWD)){
            LOGGER.info("用户[userName:{}]登录失败", token.getUsername());
            throw new UnknownAccountException();
        }

        CmsUserVo cmsUserVo = new CmsUserVo();
        cmsUserVo.setUserName(YB_USERNAME);
        cmsUserVo.setId(1);
        return cmsUserVo;
    }

    /*========================================================================*
     *                         Private Methods (私有方法)
     *========================================================================*/
}
